package ${classPackageNameMap[table.className+'Mapper']};

import ${classTypeNameMap[table.className]};
import ${classTypeNameMap[table.className+'Example']};
import ${classTypeNameMap[table.className+'VO']};
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * ${table.remarks!}
 * @author ${author!}
 * @date ${timeNow!}
 */
public interface ${table.className}Mapper {
    /**
     * 统计
     * @param example 条件
     * @return 数量
     */
    long countByExample(${table.className}Example example);

    /**
     * 删除
     * @param example 条件
     * @return 影响记录数
     */
    int deleteByExample(${table.className}Example example);

    /**
     * 删除
     * @param id 主键
     * @return 影响记录数
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 新增
     * @param entity 保存对象
     * @return 影响记录数
     */
    int insert(${table.className} entity);

    /**
     * 新增非空值
     * @param entity 保存对象
     * @return 影响记录数
     */
    int insertSelective(${table.className} entity);
    /**
     * 批量新增
     * @param entitys 新增对象
     * @return 影响记录数
     */
    Integer insertBatch(List<${table.className+'VO'}> entitys);
    /**
     * 查询列表
     * @param example 条件
     * @return ${table.className}
     */
    List<${table.className}> selectByExample(${table.className}Example example);

    /**
     * 根据主键查询
     * @param id 主键
     * @return ${table.className}
     */
    ${table.className} selectByPrimaryKey(Long id);
    /**
    * 条件查询
    * @param request 查询条件Vo
    * @return ${table.className}Vo
    */
    List<${table.className+'VO'}> selectList(${table.className}VO request);
    /**
     * 更新非空值
     * @param entity 修改对象
     * @param example 条件
     * @return 影响记录数
     */
    int updateByExampleSelective(@Param("entity") ${table.className} entity, @Param("example") ${table.className}Example example);

    /**
     * 更新
     * @param entity 修改对象
     * @param example 条件
     * @return 影响记录数
     */
    int updateByExample(@Param("entity") ${table.className} entity, @Param("example") ${table.className}Example example);

    /**
     * 根据主键更新非空值
     * @param entity 修改对象
     * @return 影响记录数
     */
    int updateByPrimaryKeySelective(${table.className} entity);

    /**
     * 根据主键更新
     * @param entity 修改对象
     * @return 影响记录数
     */
    int updateByPrimaryKey(${table.className} entity);
}